#ifndef _THREAD_POOL_
#define _THREAD_POOL_

#include <pthread.h>
#include <vector>   // 
#include <list> //存放消息队列
#include <atomic>

class thread_pool;
class thread_item{
public:
    pthread_t handler;  // 线程句柄
    thread_pool * pool; //所属哪个池子
    bool if_running;    //是否启动
    thread_item(thread_pool * pool){
        this->pool=pool;
        this->if_running=false;
    }
    ~thread_item(){}
};


class thread_pool{

public:
    thread_pool();   //这里进行变量的初始化，如条件变量
    ~thread_pool();     //释放资源，包括锁，条件变量的销毁，线程的回收，消息队列的清空

    bool create_pool(int num);  //创建线程
    
    bool add_message_to_list(char *buf);        //入消息，这里的消息（消息头+包头+包体）

    static void *thread_func(void *thread_item);       //线程体函数,需要将其设置成静态的，由于

    void end_all_thread();
    

    pthread_mutex_t mtx;    // 锁
    pthread_cond_t cond_t;  // 条件变量
    std::atomic<int> running_thread_num;    //运行的线程数量
    std::vector<thread_item*> thread_vector;    //  线程体容器
    std::list<char *> message_list; //消息队列
    std::atomic<int> is_stop_thread_flag;   //是否停止线程的运行

};





#endif